home *** CD-ROM | disk | FTP | other *** search
/ Nebula 2 / Nebula Two.iso / SourceCode / Database / Evaluator / MultiBinder.m < prev    next >
Text File  |  1993-11-01  |  2KB  |  75 lines

  1. /*
  2.  * MultiBinder.m
  3.  * A Binder for fetching multiple results sets from a stored procedure.
  4.  * You may freely copy, distribute, and reuse the code in this example.
  5.  * NeXT disclaims any warranty of any kind, expressed or  implied, as to its
  6.  * fitness for any particular use.
  7.  * Written by Jack Greenfield
  8.  */
  9.  
  10. #import "MultiBinder.h"
  11.  
  12. @implementation MultiBinder
  13.  
  14. - initFromPropertyLists:(List *)propLists
  15. {
  16.     if ((self = [super init]) != nil)
  17.     {
  18.     currentResultSet = 0;
  19.     if (propLists) propListList = [propLists copyFromZone:[self zone]];
  20.     }
  21.  
  22.     return self;
  23. }
  24.  
  25. - (List *)getCurrentProperties:(List *)aList
  26. {
  27.     return [super getProperties:aList];
  28. }
  29.  
  30. - (unsigned int)currentResultSet
  31. {
  32.     return currentResultSet ? currentResultSet - 1 : [propListList count];
  33. }
  34. - (List *) container
  35. {
  36.     return container;
  37. }
  38.  
  39. - (List *)getProperties:(List *)aList
  40. {
  41.     if (currentResultSet)
  42.     if ([delegate respondsTo:@selector(binderWillChangeResultSet:)])
  43.         [delegate binderWillChangeResultSet:self];
  44.  
  45.     [aList empty];
  46.     [aList appendList:[propListList objectAt:currentResultSet]];
  47.     [self setProperties:aList];
  48.     currentResultSet++;
  49.     if ([propListList count] && currentResultSet > [propListList count])
  50.         currentResultSet = [propListList count];
  51.     else
  52.     if ([delegate respondsTo:@selector(binderDidChangeResultSet:)])
  53.         [delegate binderDidChangeResultSet:self];
  54.  
  55.     return aList;
  56. }
  57.  
  58. - free
  59. {
  60.     [[propListList freeObjects] free];
  61.     return [super free];
  62. }
  63.  
  64. @end
  65.  
  66. @implementation DBBinder (MultiBinderMethods)
  67.  
  68. - (List *)getCurrentProperties:(List *)aList
  69. {
  70.     return([self getProperties:aList]);
  71. }
  72.  
  73. @end
  74.  
  75.